// usePagination.js
import { ref } from 'vue';

export function usePagination(fetchData, pageSize = 10) {
  const list = ref([]); // 数据列表
  const page = ref(1); // 当前页码
  const isLoading = ref(false); // 是否正在加载
  const isFinished = ref(false); // 是否加载完成

  // 加载数据
  const load = async (isReset = false) => {
    if (isLoading.value || isFinished.value) return;

    isLoading.value = true;
    try {
      const result = await fetchData(page.value, pageSize);
      if (isReset) {
        list.value = result.data; // 重置数据
      } else {
        list.value = [...list.value, ...result.data]; // 追加数据
      }

      // 判断是否加载完成
      if (result.data.length < pageSize) {
        isFinished.value = true;
      } else {
        page.value++;
      }
    } catch (error) {
      console.error('加载数据失败:', error);
    } finally {
      isLoading.value = false;
    }
  };

  // 重置分页
  const reset = () => {
    page.value = 1;
    isFinished.value = false;
    list.value = [];
    load(true); // 重新加载第一页
  };

  return {
    list,
    isLoading,
    isFinished,
    load,
    reset,
  };
}
